/**
 * 
 */
package com.modelo.dao.utils;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.springframework.util.ReflectionUtils;

/**
 * Clase utilizada solo para la parte de DAOs.
 * 
 * @author David
 * 
 */
public class UtilsDAO<T> {

	/** Nombre del metodo para obtener el ID de las entidades. */
	private final static String REFLECION_METODO_ID = "getId";

	/**
	 * Metodo que obtiene la lista de ids de las entidades en tiempo de
	 * ejecucion.
	 * 
	 * @param <T>
	 * @return List<Integer>
	 */
	public List<Integer> reflectionEntityToListId(List<T> lista) {
		List<Integer> retorno = new ArrayList<Integer>();
		for (T objeto : lista) {
			Method method = ReflectionUtils.findMethod(objeto.getClass(), REFLECION_METODO_ID);
			Object idObject = ReflectionUtils.invokeMethod(method, objeto);

			if (idObject != null && idObject instanceof Integer) {
				retorno.add((Integer) idObject);
			}
		}

		return retorno;
	}

	/**
	 * Metodo que obtiene el id de las entidades en tiempo de ejecucion.
	 * 
	 * @param clase
	 * @return Integer
	 */
	public Integer reflectionGetId(T clase) {
		Integer retorno = null;
		Method method = ReflectionUtils.findMethod(clase.getClass(), REFLECION_METODO_ID);
		Object idObject = ReflectionUtils.invokeMethod(method, clase);

		if (idObject != null && idObject instanceof Integer) {
			retorno = (Integer) idObject;
		}
		return retorno;
	}

}
